package com.pll.util;

import com.alibaba.fastjson.JSONObject;
import org.apache.http.HttpResponse;
import org.apache.http.util.EntityUtils;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;
/**
 * <b>description</b> :
 * <p>该类提供了基于阿里云云市场 API的身份证二要素验证功能。</p>
 */
@Component
public class IdCheck2Util {
    public String idcheck(String name, String idNumber) {
        System.out.println(name+idNumber);

        // API网关服务的地址，此处为示例地址，需要替换成实际使用的API网关地址
        String host = "https://zid.market.alicloudapi.com";
        // 请求的路径，表示要调用的API的具体路径
        String path = "/idcheck/Post";
        // 请求方法，此处为POST请求
        String method = "POST";
        // 用户的AppCode，需要替换成自己的AppCode。AppCode是调用API的授权凭证
        String appcode = "1c396eacc15f40bb822b4d27b31c872d"; // 此处需要替换为实际的AppCode

        // 创建一个Map来存储HTTP请求的头部信息
        Map<String, String> headers = new HashMap<String, String>();
        // 在请求头部中添加Authorization信息，格式为"APPCODE "加上用户的AppCode
        headers.put("Authorization", "APPCODE " + appcode);
        // 根据API的要求，设置请求体的Content-Type为application/x-www-form-urlencoded，并指定字符编码为UTF-8
        headers.put("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");

        // 创建一个Map来存储HTTP请求的查询参数（如果有的话），此处示例中没有使用查询参数
        Map<String, String> querys = new HashMap<String, String>();

        // 创建一个Map来存储HTTP请求的主体参数（即POST请求的body部分）
        Map<String, String> bodys = new HashMap<String, String>();

//        String name = Identity.get("name");
//        String idNumber = Identity.get("idNumber");

//        String name = "李家隆";
//        String idNumber = "350212200108244510";

        // 添加身份证号码参数，用于身份验证
        bodys.put("cardNo", idNumber);
        // 添加真实姓名参数，用于身份验证
        bodys.put("realName", name);


        try {
            // 引入HttpUtils工具类来执行POST请求
            // HttpUtils工具类需要从阿里云GitHub仓库下载
            // 提示信息指引用户下载HttpUtils工具类
            /**
             * HttpUtils工具类需要从以下链接下载：
             * <url>https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/src/main/java/com/aliyun/api/gateway/demo/util/HttpUtils.java</url>
             * 相应的依赖请参照以下链接：
             * <url>https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/pom.xml</url>
             */
            // 调用HttpUtils的doPost方法，传入请求所需的参数，包括host、path、method、headers、querys和bodys等
            // 执行POST请求并获取服务器返回的响应
            HttpResponse response = HttpUtils.doPost(host, path, method, headers, querys, bodys);
            // 打印整个HTTP响应信息，包括状态码、头部信息等
            System.out.println(response.toString());
            // 获取并打印响应体的内容（注释掉的代码，可以根据需要取消注释使用）
//            System.out.println(EntityUtils.toString(response.getEntity()));


            String responseBody = EntityUtils.toString(response.getEntity(), "UTF-8");
            System.out.println("responseBody="+responseBody);//打印responseBody

            JSONObject result = JSONObject.parseObject(responseBody).getJSONObject("result");
            System.out.println("result="+result);//打印responseBody.result

            Object reason = JSONObject.parseObject(responseBody).get("reason");
            System.out.println("reason="+reason);//打印responseBody.result.reason

//            Object isok = result.get("isok");
            Boolean isok = result.getBoolean("isok");

            System.out.println("isok="+isok);//打印responseBody.result.reason.isok

            if (Boolean.TRUE.equals(isok)) {//isok=true  ==>  身份证跟姓名匹配,  如果是false则需要进一步判断
               return "身份认证成功";
            }else {
                System.out.println("身份认证失败");
                if (reason.equals("成功")){//reason="成功"   ==>   身份证存在,姓名不匹配
                    return "身份证存在,姓名不匹配";

                }else {//reason="失败"  ==>  身份证不存在
                    return "身份证不存在";
                }
            }


        } catch (Exception e) {
            // 捕获并打印异常信息，便于调试和问题排查
            e.printStackTrace();
            return null;
        }
    }
}
